<?php

class grade_item {
	
	private $itemname = NULL;
	
	private $grademax = 100.00000;
	
	private $grademin = 0.00000;
	
	private $category_name = NULL;
	
	private $locktime = NULL;
	
	function __construct() {
		
	}
	
	function __destruct() {
		
	}
	
	function set_itemname($itemname) {
		$this->itemname = $itemname;
	}
	
	function set_grademax($grademax) {
		$grademax = str_replace(',', '.', $grademax);
		if (is_numeric($grademax)) {
			$this->grademax = $grademax;
		} else {
			throw new Exception("Incorrect grademax format ($grademax)\n");
		}
	}
	
	function set_grademin($grademin) {
		$grademin = str_replace(',', '.', $grademin);
		if (is_numeric($grademin)) {
			$this->grademin = $grademin;
		} else {
			throw new Exception("Incorrect grademin format ($grademin)\n");
		}
	}
	
	function set_category_name($category_name) {
		$this->category_name = $category_name;
	}
	
	function set_locktime($day, $month, $year) {
		$this->locktime = mktime(0, 0, 0, $month, $day, $year);
	}
	
	/**
	 * Проверяет наличие в БД категории оценки, и если её нет, то добавляет
	 * @param string $courseid Идентификатор курса
	 * @param string $fuulname Полное имя категории оценок
	 * @return void
	 */
	private function check_grade_category($courseid, $fullname) {
		include_once(__DIR__ . '/class.grade_category.php');
		
		$grade_category = new grade_category();
		$grade_category->set_course_id($courseid);
		$grade_category->set_fullname($fullname);
		if (! $grade_category->is_exist()) {
			$grade_category->add();
		}
		unset($grade_category);
	}
	
	/**
	 * Выдает следующий порядковый номер в списке (номер сортировки)
	 * @param int $courseid Идентификатор курса
	 */
	private function get_sort_order($courseid, $fullname) {
		global $DB;
		
		$sql = file_get_contents(__DIR__ . '/sql/get_sort_order.sql');
		
		$stmt = $DB->prepare($sql);
		$stmt->bind_param('iis', $courseid, $courseid, $fullname);
		$stmt->execute();
		$data = $stmt->get_result()->fetch_array(MYSQLI_ASSOC);
		
		return ($data['sortorder'] !== NULL) ? $data['sortorder'] + 1 : 1;
	}
	
	/**
	 * Добавляет заголовок оценки в БД
	 */
	function add($courses_id) {
		global $DB;
		
		$sql = file_get_contents(__DIR__ . '/sql/insert_grade_item.sql');
		$stmt = $DB->prepare($sql);
		
		foreach ($courses_id as $id) {
			$this->check_grade_category($id, $this->category_name);
			
			$sortorder = $this->get_sort_order($id, $this->category_name);
			$stmt->bind_param('iissddiii', 
				$id, 
				$id, 
				$this->category_name,
				$this->itemname,
				$this->grademax,
				$this->grademin,
				$sortorder,
				$this->locktime,
				time()
			);
			echo ($stmt->execute()) ? 
				"<p>Элемент оценивания в курс №$id успешно добавлен.</p>" : 
				"<p>Элемент оценивания в курс №$id НЕ ДОБАВЛЕН. Текст ошибки: {$stmt->error}</p>";
		}
	}
}

?>
